home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / game / shoot / ADescentSrc.lha / descent / ui / ui_mouse.c < prev    next >
C/C++ Source or Header  |  1998-08-10  |  8KB  |  339 lines

  1. /*
  2. THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  3. SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
  4. END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  5. ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  6. IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  7. SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  8. FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  9. CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
  10. AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
  11. COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
  12. */
  13.  
  14. #include <stdlib.h>
  15.  
  16. #include "mem.h"
  17. #include "fix.h"
  18. #include "types.h"
  19. #include "gr.h"
  20. #include "mouse.h"
  21.  
  22. #include "ui.h"
  23. #include "timer.h"
  24.  
  25. #ifndef VIRGIN
  26. #include <intuition/screens.h>
  27. extern struct Screen *scr;
  28. #endif
  29.  
  30. // 16x16
  31.  
  32. #define PTR_W 11
  33. #define PTR_H 19
  34.  
  35. char ui_converted_mouse_pointer[PTR_W*PTR_H];
  36. char ui_mouse_pointer[] =  \
  37. //"1111100000000000"\
  38. //"1111111111000000"\
  39. //"1144411111111111"\
  40. //"1144444444111111"\
  41. //"1144444444444110"\
  42. //"0114444444441100"\
  43. //"0114444444411000"\
  44. //"0114444444411000"\
  45. //"0114444444441100"\
  46. //"0114444444444110"\
  47. //"0011444444444411"\
  48. //"0011444444444411"\
  49. //"0011411144444411"\
  50. //"0011111111444111"\
  51. //"0011100011111110"\
  52. //"0011000000111100";
  53.  
  54. "10000000000"\
  55. "11000000000"\
  56. "14100000000"\
  57. "14410000000"\
  58. "14441000000"\
  59. "14444100000"\
  60. "14444410000"\
  61. "14444441000"\
  62. "14444444100"\
  63. "14444444410"\
  64. "14444411111"\
  65. "14114410000"\
  66. "11014410000"\
  67. "10001441000"\
  68. "00001441000"\
  69. "00001441000"\
  70. "00000144100"\
  71. "00000144100"\
  72. "00000111100";
  73.  
  74. static grs_bitmap * default_pointer;
  75.  
  76.  
  77. UI_MOUSE Mouse;
  78.  
  79.  
  80. /*
  81. int ui_mouse_find_gadget(short n)
  82. {
  83.     int i;
  84.  
  85.     for (i=1; i<=Window[n].NumItems; i++ )  {
  86.         if ((Mouse.x >= (Window[n].Item[i].x1+Window[n].x)) &&
  87.             (Mouse.x <= (Window[n].Item[i].x2+Window[n].x)) &&
  88.             (Mouse.y >= (Window[n].Item[i].y1+Window[n].y)) &&
  89.             (Mouse.y <= (Window[n].Item[i].y2+Window[n].y)) )
  90.             return i;
  91.     }
  92.     return 0;
  93. }
  94. */
  95. #ifdef UIMOUSE_ORIG
  96. void ui_mouse_show()
  97. {
  98.     if (Mouse.hidden==1 )   {
  99.         Mouse.hidden = 0;
  100.         // Save the background under new pointer
  101.         Mouse.bg_saved=1;
  102.         Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
  103.         gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, 0, 0, Mouse.bg_x, Mouse.bg_y, &(grd_curscreen->sc_canvas.cv_bitmap),Mouse.background );
  104.         // Draw the new pointer
  105.         gr_bm_ubitbltm( Mouse.pointer->bm_w, Mouse.pointer->bm_h, Mouse.x, Mouse.y, 0, 0, Mouse.pointer, &(grd_curscreen->sc_canvas.cv_bitmap)   );
  106.     }
  107. }
  108. #else
  109. void ui_mouse_show()
  110. {
  111.     return;
  112.     if (Mouse.hidden == 1) {
  113.         Mouse.hidden = 0;
  114.         Mouse.bg_saved = 0;
  115.         gr_mouse_show();
  116.     }
  117. }
  118. #endif
  119.  
  120. #ifdef UIMOUSE_ORIG
  121. void ui_mouse_hide()
  122. {
  123.     if (Mouse.hidden==0 )   {
  124.         Mouse.hidden = 1;
  125.         if (Mouse.bg_saved==1)  {
  126.             gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, Mouse.bg_x, Mouse.bg_y, 0, 0, Mouse.background,&(grd_curscreen->sc_canvas.cv_bitmap) );
  127.             Mouse.bg_saved = 0;
  128.         }
  129.     }
  130. }
  131. #else
  132. void ui_mouse_hide()
  133. {
  134.     return;
  135.     if (Mouse.hidden == 0) {
  136.         Mouse.hidden = 1;
  137.         gr_mouse_hide();
  138.     }
  139. }
  140. #endif
  141.  
  142. void ui_mouse_process()
  143. {   int buttons,w,h;
  144.  
  145.     //if (Mouse.hidden==0)
  146.     //    mouse_get_pos( &Mouse.x, &Mouse.y );
  147.     //else
  148.     //    mouse_set_pos( Mouse.x, Mouse.y );
  149.  
  150.  
  151.     Mouse.dx = Mouse.new_dx;
  152.     Mouse.dy = Mouse.new_dy;
  153.     buttons = Mouse.new_buttons;
  154.  
  155. #ifdef UIMOUSE_ORIG
  156.     Mouse.x += Mouse.dx;
  157.     Mouse.y += Mouse.dy;
  158. #else
  159.     Mouse.x = scr->MouseX;
  160.     Mouse.y = scr->MouseY;
  161. #endif
  162.  
  163.     w = grd_curscreen->sc_w;
  164.     h = grd_curscreen->sc_h;
  165.  
  166.     if (Mouse.x < 0 ) Mouse.x = 0;
  167.     if (Mouse.y < 0 ) Mouse.y = 0;
  168. //  if (Mouse.x > w-Mouse.pointer->bm_w ) Mouse.x = w - Mouse.pointer->bm_w;
  169. //  if (Mouse.y > h-Mouse.pointer->bm_h ) Mouse.y = h - Mouse.pointer->bm_h;
  170.  
  171.     if (Mouse.x > w-3 ) Mouse.x = w - 3;
  172.     if (Mouse.y > h-3 ) Mouse.y = h - 3;
  173.  
  174.     if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) )
  175.         Mouse.moved = 1;
  176.  
  177. #ifdef UIMOUSE_ORIG
  178.     if ( (Mouse.bg_x!=Mouse.x) || (Mouse.bg_y!=Mouse.y) || (Mouse.bg_saved==0) )
  179.     {
  180.         // Restore the background under old pointer
  181.         if (Mouse.bg_saved==1)  {
  182.             gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, Mouse.bg_x, Mouse.bg_y, 0, 0, Mouse.background, &(grd_curscreen->sc_canvas.cv_bitmap)   );
  183.         }
  184.         Mouse.bg_saved = 0;
  185.  
  186.         if (!Mouse.hidden)
  187.         {
  188.             // Save the background under new pointer
  189.             Mouse.bg_saved=1;
  190.             Mouse.bg_x = Mouse.x; Mouse.bg_y = Mouse.y;
  191.  
  192.             gr_bm_ubitblt( Mouse.background->bm_w, Mouse.background->bm_h, 0, 0, Mouse.bg_x, Mouse.bg_y, &(grd_curscreen->sc_canvas.cv_bitmap),Mouse.background   );
  193.  
  194.             // Draw the new pointer
  195.             gr_bm_ubitbltm( Mouse.pointer->bm_w, Mouse.pointer->bm_h, Mouse.x, Mouse.y, 0, 0, Mouse.pointer, &(grd_curscreen->sc_canvas.cv_bitmap)   );
  196.         }
  197.     }
  198. #endif
  199.  
  200.     Mouse.b1_last_status = Mouse.b1_status;
  201.     Mouse.b2_last_status = Mouse.b2_status;
  202.  
  203.     if ( Mouse.backwards== 0 )
  204.     {
  205.         if (buttons & MOUSE_LBTN )
  206.             Mouse.b1_status = BUTTON_PRESSED;
  207.         else
  208.             Mouse.b1_status = BUTTON_RELEASED;
  209.         if (buttons & MOUSE_RBTN )
  210.             Mouse.b2_status = BUTTON_PRESSED;
  211.         else
  212.             Mouse.b2_status = BUTTON_RELEASED;
  213.     } else {
  214.         if (buttons & MOUSE_LBTN )
  215.             Mouse.b2_status = BUTTON_PRESSED;
  216.         else
  217.             Mouse.b2_status = BUTTON_RELEASED;
  218.         if (buttons & MOUSE_RBTN )
  219.             Mouse.b1_status = BUTTON_PRESSED;
  220.         else
  221.             Mouse.b1_status = BUTTON_RELEASED;
  222.     }
  223.  
  224.     if ((Mouse.b1_status & BUTTON_PRESSED) && (Mouse.b1_last_status & BUTTON_RELEASED) )
  225.     {
  226.         if ( (TICKER <= Mouse.time_lastpressed+5)  )  //&& (Mouse.moved==0)
  227.             Mouse.b1_status |= BUTTON_DOUBLE_CLICKED;
  228.  
  229.         Mouse.moved = 0;
  230.         Mouse.time_lastpressed = TICKER;
  231.         Mouse.b1_status |= BUTTON_JUST_PRESSED;
  232.  
  233.     }
  234.     else if ((Mouse.b1_status & BUTTON_RELEASED) && (Mouse.b1_last_status & BUTTON_PRESSED) )
  235.         Mouse.b1_status |= BUTTON_JUST_RELEASED;
  236.  
  237.     if ((Mouse.b2_status & BUTTON_PRESSED) && (Mouse.b2_last_status & BUTTON_RELEASED) )
  238.         Mouse.b2_status |= BUTTON_JUST_PRESSED;
  239.     else if ((Mouse.b2_status & BUTTON_RELEASED) && (Mouse.b2_last_status & BUTTON_PRESSED) )
  240.         Mouse.b2_status |= BUTTON_JUST_RELEASED;
  241. }
  242.  
  243. void ui_mouse_flip_buttons()
  244. {   short x;
  245.  
  246.     x = Mouse.b1_status;
  247.     Mouse.b1_status = Mouse.b2_status;
  248.     Mouse.b2_status = x;
  249.  
  250.     x = Mouse.b1_last_status;
  251.     Mouse.b1_last_status = Mouse.b2_last_status;
  252.     Mouse.b2_last_status = x;
  253.  
  254.     Mouse.backwards ^= 1;
  255.  
  256. }
  257.  
  258.  
  259. void ui_mouse_init()
  260. {
  261.     int i, w,h;
  262.  
  263.     //mouse_init();
  264.  
  265.     w = grd_curscreen->sc_w;
  266.     h = grd_curscreen->sc_h;
  267.  
  268.     mouse_set_limits( 0,0, w-1, h-1 );
  269.  
  270.     Mouse.x = w/2;
  271.     Mouse.y = h/2;
  272.  
  273.     //mouse_set_pos( w/2, h/2 );
  274.  
  275.     for (i=0; i < PTR_W*PTR_H; i++ )   {
  276.         switch (ui_mouse_pointer[i]) {
  277.         case '0':
  278.             ui_converted_mouse_pointer[i]=255;
  279.             break;
  280.         case '1':
  281.             ui_converted_mouse_pointer[i]=CBLACK;
  282.             break;
  283.         case '2':
  284.             ui_converted_mouse_pointer[i]=CGREY;
  285.             break;
  286.         case '3':
  287.             ui_converted_mouse_pointer[i]=CWHITE;
  288.             break;
  289.         case '4':
  290.             ui_converted_mouse_pointer[i]=CBRIGHT;
  291.             break;
  292.         case '5':
  293.             ui_converted_mouse_pointer[i]=CRED;
  294.             break;
  295.         }
  296.     }
  297.  
  298.     default_pointer = gr_create_bitmap_raw( PTR_W, PTR_H, ui_converted_mouse_pointer );
  299.     Mouse.x = Mouse.y = 0;
  300.     Mouse.backwards = 0;
  301.     Mouse.hidden = 1;
  302.     Mouse.b1_status = Mouse.b1_last_status = BUTTON_RELEASED;
  303.     Mouse.b2_status = Mouse.b2_last_status = BUTTON_RELEASED;
  304.     Mouse.b3_status = Mouse.b3_last_status = BUTTON_RELEASED;
  305.     Mouse.bg_x = Mouse.bg_y = 0;
  306.     Mouse.bg_saved = 0;
  307.     Mouse.pointer = default_pointer;
  308.     Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
  309.     Mouse.time_lastpressed = 0;
  310.     Mouse.moved = 0;
  311.  
  312. }
  313.  
  314. grs_bitmap * ui_mouse_set_pointer( grs_bitmap * new )
  315. {
  316.     grs_bitmap * temp = Mouse.pointer;
  317.  
  318.     gr_free_bitmap( Mouse.background );
  319.  
  320.     if (new == NULL ) {
  321.         Mouse.pointer = default_pointer;
  322.     } else {
  323.         Mouse.pointer = new;
  324.     }
  325.     Mouse.background = gr_create_bitmap( Mouse.pointer->bm_w, Mouse.pointer->bm_h );
  326.  
  327.     return temp;
  328.  
  329. }
  330.  
  331. void ui_mouse_close()
  332. {
  333.     gr_free_sub_bitmap(default_pointer);
  334.  
  335.     gr_free_bitmap(Mouse.background);
  336.  
  337. }
  338.  
  339.